/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Negocio;

import Datos.Conexion;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Luis
 */
public class clsInsumo {

    public static void insertarInsumo(String nombre, float val_proteico, float stock,
            String unidad, String prioridad, String foto, String nombCategoria) {
        String sql = "call `insert_Insumo`(?,?,?,?,?,?,?)";
        try {
            CallableStatement proc = Conexion.conn.prepareCall(sql);
            proc.setString(1, nombre);
            proc.setFloat(2, val_proteico);
            proc.setFloat(3, stock);
            proc.setString(4, unidad);
            proc.setString(5, prioridad);
            proc.setString(6, foto);
            proc.setString(7, nombCategoria);

            proc.executeUpdate();
        } catch (Exception e) {
            System.out.println("error al insertar insumo -- " + e);
        }
    }

    public static void actualizarInsumo(int idInsumo, String nombre, float val_proteico, float stock,
            String unidad, String prioridad, String foto, int idCategoria) {
        String sql = "call `update_Insumo`(?,?,?,?,?,?,?,?)";
        try {
            CallableStatement proc = Conexion.conn.prepareCall(sql);
            proc.setInt(1, idInsumo);
            proc.setString(2, nombre);
            proc.setFloat(3, val_proteico);
            proc.setFloat(4, stock);
            proc.setString(5, unidad);
            proc.setString(6, prioridad);
            proc.setString(7, foto);
            proc.setInt(8, idCategoria);

            proc.executeUpdate();
        } catch (Exception e) {
            System.out.println("error al actualizar insumo -- " + e);
        }
    }

    public static void mostrarTablaInsumos(JTable jtb, String like) {
        try {
            if (like == null) {
                like = "";
            }
            CallableStatement cst = Conexion.conn.prepareCall("call mostrar_Insumo (?)");
            cst.setString(1, "%" + like + "%");
            ResultSet rs = cst.executeQuery();
            DefaultTableModel dftm = (DefaultTableModel) jtb.getModel();
            dftm.setNumRows(0);
            while (rs.next()) {
                Object[] o = new Object[dftm.getColumnCount()];
                for (int i = 0; i < o.length; i++) {
                    o[i] = rs.getObject(i + 1);
                }

                dftm.addRow(o);
            }
            jtb.setModel(dftm);
        } catch (Exception e) {
            System.out.println("error al mostrar en tabla -- " + e);
        }
    }

    public static void mostrarTablaInsumosCategoria(JTable jtb, String Categoria) {
        try {
            CallableStatement cst = Conexion.conn.prepareCall("CALL `mostrar_Insumo_de_Categoria`(?)");
            cst.setString(1, "%" + Categoria + "%");
            ResultSet rs = cst.executeQuery();
            DefaultTableModel dftm = (DefaultTableModel) jtb.getModel();
            dftm.setNumRows(0);
            Object[] o = new Object[dftm.getColumnCount()];
            while (rs.next()) {
                for (int i = 0; i < o.length; i++) {
                    o[i] = rs.getObject(i + 1);
                }
                dftm.addRow(o);
            }
        } catch (Exception e) {
            System.out.println("erro al mostrar en tabla por categoria -- " + e);
        }
    }

    public static void mostrarCboCategoria(JComboBox cbo) {
        try {
            CallableStatement cst = Conexion.conn.prepareCall("call mostrar_nombCategoria");
            ResultSet rs = cst.executeQuery();
            DefaultComboBoxModel dcbm = (DefaultComboBoxModel) cbo.getModel();
            dcbm.removeAllElements();
            dcbm.addElement("TODOS");
            while (rs.next()) {
                dcbm.addElement(rs.getObject(1));
            }
            cbo.setModel(dcbm);
        } catch (Exception e) {
            System.out.println("error al mostrar en ComboBox -- " + e);
        }
    }

    public static void mostrarSustitutos(DefaultListModel dlm, String idInsumo) {
        try {
            CallableStatement cst = Conexion.conn.prepareCall("call mostrar_Sustituto(?)");
            cst.setString(1, idInsumo);
            ResultSet rs = cst.executeQuery();

            dlm.removeAllElements();
            while (rs.next()) {
                dlm.addElement(rs.getObject(1));
            }
        } catch (Exception e) {
            System.out.println("error al mostrar sustituto -- " + e);
        }
    }

    public static void insertarSustitutos(int idInsumo, int idInsSus) {
        try {
            String sql = "call insert_Sustituto(" + idInsumo + "," + idInsSus + ")";
            CallableStatement cst = Conexion.conn.prepareCall(sql);
            cst.executeQuery();
        } catch (Exception e) {
            System.out.println("error al insertar sustituto -- " + e);
        }
    }

    public static int getIdInsumo(String nombre) {
        try {
            String sql = "call obtener_idInsumo(\"" + nombre + "\")";
            CallableStatement cst = Conexion.conn.prepareCall(sql);
            ResultSet rs = cst.executeQuery();
            rs.next();
            int x = rs.getInt(1);
            return x;
        } catch (Exception e) {
            System.out.println("error al obtener idInsumo -- " + e);
        }
        return -1;
    }

    public static void eliminarSustituto(int codigo) {
        try {
            String sql = "call deleted_Sustituto(" + codigo + ")";
            CallableStatement cst = Conexion.conn.prepareCall(sql);
            cst.executeQuery();
        } catch (Exception e) {
            System.out.println("error al eliminar sustitutos -- " + e);
        }
    }
    
    public static void cargarSustituto(JComboBox jcb,String sql){
        try {
            jcb.removeAllItems();
            ResultSet rs=Conexion.executeQuery(Conexion.conn, sql, null);
            while (rs.next()){
               jcb.addItem(rs.getString(1));
            }    
        } catch (SQLException ex) {
            System.out.println("error al cargar cbx de sustitutos");
        }
    }
}
